package middlewares

import (
	"context"
	"github.com/gin-gonic/gin"
	"net/http"
	"service_base_shop_api/order_web/global"
	protopb "service_base_shop_api/order_web/proto"
	"service_base_shop_api/order_web/utils"
)

func JWTAuth() gin.HandlerFunc {
	return func(c *gin.Context) {
		// 我们这里jwt鉴权取头部信息 x-token 登录时回返回token信息 这里前端需要把token存储到cookie或者本地localSstorage中 不过需要跟后端协商过期时间 可以约定刷新令牌或者重新登录
		token := c.Request.Header.Get("x-token")
		if token == "" {
			c.JSON(http.StatusUnauthorized, map[string]string{
				"msg":"请登录",
			})
			c.Abort()
			return
		}

		//解析token
		ParseTokenRep,err := global.JwtClient.ParseToken(context.Background(),&protopb.ParseTokenReq{Token: token})
		if err != nil {
			utils.HandleGrpcErrorToHttp(err,c)
		}
		c.Set("ID",ParseTokenRep.ID)
		c.Set("NickName",ParseTokenRep.NickName)
		c.Next()
	}
}
